package leetcode每日一题.leetcode20212;

/**
 * 1. 问题描述
 *      给你一个二进制数组nums，你需要从中删掉一个元素。
 *      请你在删掉元素的结果数组中，返回最长的且只包含 1 的非空子数组的长度。
 *      如果不存在这样的子数组，请返回 0 。
 *
 * 2. 算法分析
 *
 *      1. 滑动窗口思路分析：
 *          我们只需要设置一个变量zeros来记录窗口中0出现的次数，如果当前窗口中0的个数<=1
 *          说明此时我们可以继续扩张右窗口，否则，移动左窗口
 *          此题是1004题的一个特例，方法和代码类似
 *
 *      2. 递推法的思路分析：
 *
 *
 * 3. 代码实现
 */
@SuppressWarnings("all")
public class Q002_3删掉一个元素以后全为1的最长子数组 {

    // 滑动窗口
    public int longestSubarray1(int[] nums) {
        int len = nums.length;
        if(len == 0) {
            return 0;
        }
        int res = 0;
        int left = 0;
        int right = 0;
        int zeros = 0; // 记录窗口中出现的0的个数
        while(right < len) {
            if(nums[right] == 0) {
                zeros++;
            }
            right++;

            while(zeros > 1) {
                if(nums[left] == 0) {
                    zeros--;
                }
                left++;
            }
            res = Math.max(res,right - left - 1);
        }
        return res;
    }

    // 递推实现
    public int longestSubarray2(int[] nums) {
        int len = nums.length;
        if(len == 0) {return 0;}
        int res = 0;

        return res;
    }

    // 递推实现的优化
    public int longestSubarray3(int[] nums) {
        int len = nums.length;
        if(len == 0) {return 0;}
        int res = 0;
        String a = "a";
        System.out.println(a.toUpperCase());
        return res;
    }
}
